/**
 * 应用关闭时执行的任务函数
 */
export type ShutdownTask = () => Promise<void>;

/**
 * 存储所有注册的关闭任务
 */
const shutdownTasks: Array<ShutdownTask> = [];

/**
 * 注册一个在应用关闭时执行的任务
 * @param {ShutdownTask} task 关闭时需要执行的任务函数，应为无参数的同步或异步函数
 */
export function onShutdown(task: ShutdownTask) {
  shutdownTasks.push(task);
}

/**
 * 优雅关闭应用，执行所有已注册的关闭任务并退出进程
 * 该函数会并行执行所有关闭任务，等待它们完成后再退出当前进程
 */
export async function gracefulShutdown() {
  const tasks = shutdownTasks.map(async task => task());
  await Promise.all(tasks);
  process.exit(0);
}
